#ifndef SE_QTABLE_H
#define SEQ_TABLE_H

typedef int Element_t;  // _t 表示用typeof定义的类型

typedef struct {
    Element_t *data;  //存储表中数据空间的起始地址
    int pos;          //指向数据空间的带插入位置
    int capacity;     //表的容量
}SEQtable_t;          //使用匿名结构体定义表类型
/*
在C语言中，typedef struct { ... } SEQtable_t;和struct SEQtable_t { ... };有区别：
定义方式
typedef方式将匿名结构体类型定义为SEQtable_t，此后可以直接使用SEQtable_t来声明结构体变量，例如SEQtable_t table;。
直接使用struct SEQtable_t定义结构体时，声明变量需要使用struct SEQtable_t，如struct SEQtable_t table;，不能直接用SEQtable_t声明变量，除非再用typedef为其定义别名
*/

//表头在堆上申请，提供给其他的函数使用，需要释放的接口
SEQtable_t *createSeqTable(int n); //创建表头，同时在堆上申请n个元素的存储空间
void releaseSeqTable(SEQtable_t *table); //释放表头和存储空间

int pushBackSeqTable(SEQtable_t *table, Element_t value); //在表尾插入元素
int insertPosSeqTable(SEQtable_t *table, int index, Element_t value); //在指定位置插入元素

//在指定位置删，改,查实现简单，只要先判断index是否合法，然后再进行操作，不做实现了
int deletePosSeqTable(SEQtable_t *table, int index);//删除指定位置的元素
int changePosSeqTable(SEQtable_t *table, int index, Element_t value);//修改指定位置的元素
Element_t findPosSeqTable(const SEQtable_t *table, int index);//查找指定位置的元素


int deleteSeqTable(SEQtable_t *table, Element_t value);//删除指定元素
int findSeqTable(const SEQtable_t *table, Element_t value);//查找指定元素的位置

void showSeqTable(const SEQtable_t *table);  //打印表中元素

#endif
